/**
 * 
 */
package br.com.skynix.tcmc.model.oportunidade;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.com.skynix.tcmc.base.model.EntidadeAuditavel;
import br.com.skynix.tcmc.model.conta.Conta;
import br.com.skynix.tcmc.model.conta.Contato;
import br.com.skynix.tcmc.model.rh.Empresa;

/**
 * @author davi
 * 
 */
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "tb_atividade")
public abstract class Atividade extends EntidadeAuditavel {
	@ManyToOne
	@JoinColumn(name = "id_oportunidade_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK001_atividade")
	private Oportunidade oportunidade;

	@ManyToOne
	@JoinColumn(name = "id_conta_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK002_atividade")
	private Conta conta;

	@ManyToOne
	@JoinColumn(name = "id_contato_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK003_atividade")
	private Contato contato;

	@ManyToOne
	@JoinColumn(name = "id_atividade_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK004_atividade")
	private Atividade atividade;

	@NotNull
	@ManyToOne
	@JoinColumn(name = "id_empresa_fk", nullable = false,
			referencedColumnName = "id")
	@ForeignKey(name = "FK005_atividade")
	private Empresa empresa;

	@Size(max = 255)
	@Column(nullable = true, length = 255)
	private String assunto;

	@Column(name = "data_inicio", nullable = true)
	private Timestamp dataInicio;

	@NotNull
	@Size(max = 1)
	@Column(name = "flag_status", nullable = false, length = 1)
	private String flagStatus;

	@Size(max = 2)
	@Column(name = "flag_relacao", nullable = true, length = 2,
			columnDefinition = "CHAR(2) DEFAULT NULL")
	private String flagRelacao;

	@Column(nullable = true, columnDefinition = "TEXT DEFAULT NULL")
	private String descricao;

	/**
	 * @return the oportunidade
	 */
	public Oportunidade getOportunidade() {
		return oportunidade;
	}

	/**
	 * @param oportunidade the oportunidade to set
	 */
	public void setOportunidade(Oportunidade oportunidade) {
		this.oportunidade = oportunidade;
	}

	/**
	 * @return the conta
	 */
	public Conta getConta() {
		return conta;
	}

	/**
	 * @param conta the conta to set
	 */
	public void setConta(Conta conta) {
		this.conta = conta;
	}

	/**
	 * @return the contato
	 */
	public Contato getContato() {
		return contato;
	}

	/**
	 * @param contato the contato to set
	 */
	public void setContato(Contato contato) {
		this.contato = contato;
	}

	/**
	 * @return the atividade
	 */
	public Atividade getAtividade() {
		return atividade;
	}

	/**
	 * @param atividade the atividade to set
	 */
	public void setAtividade(Atividade atividade) {
		this.atividade = atividade;
	}

	/**
	 * @return the empresa
	 */
	public Empresa getEmpresa() {
		return empresa;
	}

	/**
	 * @param empresa the empresa to set
	 */
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	/**
	 * @return the assunto
	 */
	public String getAssunto() {
		return assunto;
	}

	/**
	 * @param assunto the assunto to set
	 */
	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}

	/**
	 * @return the dataInicio
	 */
	public Timestamp getDataInicio() {
		return dataInicio;
	}

	/**
	 * @param dataInicio the dataInicio to set
	 */
	public void setDataInicio(Timestamp dataInicio) {
		this.dataInicio = dataInicio;
	}

	/**
	 * @return the flagStatus
	 */
	public String getFlagStatus() {
		return flagStatus;
	}

	/**
	 * @param flagStatus the flagStatus to set
	 */
	public void setFlagStatus(String flagStatus) {
		this.flagStatus = flagStatus;
	}

	/**
	 * @return the flagRelacao
	 */
	public String getFlagRelacao() {
		return flagRelacao;
	}

	/**
	 * @param flagRelacao the flagRelacao to set
	 */
	public void setFlagRelacao(String flagRelacao) {
		this.flagRelacao = flagRelacao;
	}

	/**
	 * @return the descricao
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * @param descricao the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
}
